前面已经对SVD进行了推导,但自己一直理解不够深入,知道看了Strang教授的视频才恍然大悟。
思考
对于对称矩阵,我们知道,可以分解为,这是很美妙和对称的式子,但对于一般的矩阵,我们怎么能得到类似的式子呢?
我们的目标是想要找到两组不同的正交矩阵(,)和对角矩阵,来表示。
因此,SVD就是对于任意矩阵的“对角化”过程。
子空间
这里,我们回到四个基本子空间。我们可以在行空间(row space)中找到一组标准正交基(这很容易),将其进行映射后(通过),转化为列空间(column space)中的标准正交基。也就是说,在行空间中的,通过转化为列空间中的:
其中为伸缩因子。
将所有行空间和列空间中的标准正交基写成矩阵的形式:
其中,表示矩阵的秩。
我们很容易将其扩充为整个行空间和列空间:
其中,扩充的基向量来源于零空间和左零空间(这很容易)。
回到SVD
这样,我们整理一下就得到:
这就是SVD分解:我们需要在行空间和列空间中找到两组不同的基,并且这两组基可以通过相互转换。
然而,这还不够。我们不知道如何求得和。最常见的想法就是:我们把一个变量消去,只保留一个变量,这样就容易求解了。
幸运的是,这很容易,考虑:
- 我们发现,在这个对称矩阵中,就是其特征向量,而它的所有非零特征向量都是正的,因此这个矩阵是半正定的。
可以对同样进行求解求得。
我们发现,尽管是任意矩阵,但和很特殊,并且可以通过求其的特征向量来对进行奇异值分解。
实际上,和还有更为特殊的关系(特征值相同等等),严格的推导可以参考我这篇博客。
总结
其实SVD没什么特别的,就是我们对于实对称矩阵的推广。
经过分析,我们发现在列空间和行空间中找到一组基,可以使得任意矩阵分解成的形式。
并且,求解和并不复杂,与和有关。
在求解时,先求的特征值和特征向量,其特征向量单位化后就是的前r列,再将其扩充到左零空间;同样,求的特征向量,单位化后就是的前r列,再将其扩充到零空间;填充,即可求解。